MULTI:
	PUSH(FP);
	MOV(FP, SP);
	PUSH(R1);
	PUSH(R2);
	PUSH(R3);
	MOV(R1, FPARG(1));
	CMP(R1,0);
	JUMP_EQ(MULTI_NO_ARG);
	MOV(R2,1);
	MOV(R3,1);
	INCR(R1);
MULTI_LOOP:
	CMP(T_INTEGER,IND(FPARG(R1)));
	JUMP_EQ(MULTI_INT);
	CMP(T_FRACTION,IND(FPARG(R1)));
	JUMP_NE(TYPE_ERROR);
	MUL(R3,INDD(FPARG(R1),2));
MULTI_INT:
	MUL(R2,INDD(FPARG(R1),1));
	DECR(R1);
	CMP(R1,1);
	JUMP_GT(MULTI_LOOP);
  PUSH(R3);
  PUSH(R2);
  CALL(MAKE_SOB_FRACTION);
  DROP(2);
  PUSH(R0);
  CALL(MINIMIZE_FRAC);
  DROP(1);
  POP(R3);
  POP(R2);
  POP(R1);
  POP(FP);

  RETURN;

MULTI_NO_ARG:
	PUSH(1);
	CALL(MAKE_SOB_INTEGER);
	DROP(1);
	POP(R3);
	POP(R2);
	POP(R1);
	POP(FP);
	RETURN;
